<?php
/**
 * 类管理器
 *
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 *
 * @author      cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */
class UE_Loader_Exception extends UE_Exception {}

/**
 * 类管理器
 * 
 * 方案
 * 1.统一接口,static/const 类型在抽象类中定义，通过变量函数来创建不同的类的实例
 * 2.使用自定义的类替换框架中的类
 */
class UE_Loader {
	/**
	 * 类名,文件名
	 */
	public static function loadClass($class) {
		$replace = str_replace('_', '/', $class);
		$file = LIBS_DIR . "/{$replace}.php";
		
		if (is_file($file)) {
			require_once $file;
		} else {
			throw new UE_Loader_Exception("Class file [$file] not exists.");
		}
	}
		
	public static function loadCtl($name, $app) {
		$file = APPS_DIR . "/$app/controllers/$name.php";
		if (!is_file($file)) {
			throw new UE_Loader_Exception("控制器($app.$name)的文件不存在");
		} 
		include_once $file;
	}
		
	public static function loadModel($name, $app = '') {
		$app || $app = $_GET['app'];
		$file = APPS_DIR . "/$app/models/$name.php";
		if (!is_file($file)) {
			throw new UE_Loader_Exception("模型($app.$name)的文件不存在");
		} 
		include_once $file;
	}	
	
	public static function loadWidget($name, $app) {
		$file = APPS_DIR . "/$app/widgets/$name.php";
		if (!is_file($file)) {
			if (UE_Config::get('debug')) {
			    echo("小工具($app.$name)的文件不存在。");	
			}
			return false;
		} 
		include_once $file;
		return true;
	}
	
	public static function loadFilter($name, $app) {
		$file = APPS_DIR . "/$app/filters/$name.php";
		if (!is_file($file)) {
			if (UE_Config::get('debug')) {
				echo ("过滤器($app.$name)的文件不存在。");
			}
			
			return false;
		} 
		
		include_once $file;
		return true;
	}
}


